package com.dk.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dk.data.Result;
import com.dk.em.ConstantEnum;
import com.dk.pojo.TSpike;
import com.dk.service.ITSpikeService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import java.util.Date;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author author
 * @since 2021-10-29
 */
@RestController
@RequestMapping("/tSpikeController")
public class TSpikeController {

    @Autowired
    private ITSpikeService itSpikeService;

    @Autowired
    private RedisTemplate redisTemplate;

    @ApiOperation(value = "秒杀数量全部数量")
    @GetMapping
    public Result getInfoIdBy(){
        //查询缓存中所有需要秒杀的商品
        List<TSpike> spikeCoods = (List<TSpike>)redisTemplate.boundHashOps("seckillCoods").values();
        if(spikeCoods == null || spikeCoods.size() == 0){
            //查询秒杀商品
            QueryWrapper Wrapper = new QueryWrapper<TSpike>();
            //库存大于0
            Wrapper.gt("stock_count",0);
            //审核通过
            Wrapper.eq("status",1);
            //秒杀时间在开始时间与结束时间之间
            Date date = new Date();
            //当前时间大于开始时间(开始时间小于等于当前时间)
            Wrapper.le("start_time",date);   //le: 小于
            //当前时间小于结束时间(结束时间大于或等于当前时间)
            Wrapper.ge("end_time",date);     //ge: 大于
            spikeCoods  = itSpikeService.selectList(Wrapper);
            //放到redis中
            for (TSpike spike : spikeCoods) {
                redisTemplate.boundHashOps("spikeCoods").put(spike.getId(), spike);
                //将预减库存单独放到redis中
                redisTemplate.boundValueOps(spike.getId()).set(spike.getStockCount().toString());
            }
        }
        System.out.println(spikeCoods);
        return Result.bulid(ConstantEnum.SUCCESS).setResult(spikeCoods);
    }
}
